﻿// 501 二分查找.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>


using namespace std;

/*
http://oj.daimayuan.top/course/22/problem/59


有 n个数 a1,a2,…,an和 m个询问。

每次询问给一个数 x，回答 a1,a2,…,an
里面分别有多少个数字小于 x，等于 x以及大于 x。

输入格式
第一行两个整数 n,m。接下来一行 n 个整数，表示 a1,a2,…,an。

接下来 m行，每行一个整数 x。

输出格式
输出 m行，每行三个整数表示答案。

样例输入
6 6
3 5 1 5 3 5
1
2
3
4
5
6
样例输出
0 1 5
1 0 5
1 2 3
3 0 3
3 3 0
6 0 0
数据规模
对于 100%的数据，满足 1≤n,m≤2×105,1≤ai,x≤109
*/

const int N = 200010;
int a[N];
int n, m,x;


void solve(int x) {
	int l = 0, r = n+1;

	int g = 0; int le = 0; int e = 0;

	while (l < r) {
		int mid = l + r >> 1;
		if (a[mid] >= x) r = mid;
		else l = mid + 1;
	}
	g = l;

	l = 0; r = n +1;
	while (l < r) {
		int mid = (l + r + 1) >> 1;
		if (a[mid] <= x) l = mid;
		else r = mid - 1;
	}
	le = l;
	
	if (a[le] == x || a[g] == x) {
		e = le - g  + 1;
		le = g ;
		g = g + e-1;
	}
	else {
		e = 0;
		le++;
		g--;
	}

	printf("%d %d %d\n", le - 1, e, n - g);
	//cout << le-1 << " " << e <<" "<< n - g << endl;
	return ;
}


int main()
{
	//cin >> n >> m;
	scanf("%d%d",&n,&m);
	for (int i = 1; i <= n; i++) {
		scanf("%d",&a[i]);
		//cin >> a[i];
	}
	a[0] = -1; a[n + 1] = 1e9 + 10;
	sort(a, a + n+2);

	for (int i = 0; i < m; i++) {
		scanf("%d",&x);
		//cin >> x;
		solve(x);
	}

	return 0;
}

 